//
//  HMEmoticonManager.swift
//  WeiBo
//
//  Created by apple on 16/7/2.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

class HMEmoticonManager: NSObject {

    // 总共就是4组表情,我们就定义4组表情
    
 /// 最近表情
    static var recentEmoticon: [HMEmoticon] = [HMEmoticon]()
///  默认表情 -- 102个表情 6页
    static var defaultEmoticon: [HMEmoticon] = HMEmoticonManager.readEmoticon("com.sina.default") //[HMEmoticon]()
///  emoji
    static var emojiEmoticon: [HMEmoticon] = HMEmoticonManager.readEmoticon("com.apple.emoji") //[HMEmoticon]()
///  浪小花
    static var lxhEmoticon: [HMEmoticon] = HMEmoticonManager.readEmoticon("com.sina.lxh")//[HMEmoticon]()
    
    
    class func addRecentEmoticon(emoticon: HMEmoticon) {
        
        printLog(emoticon)
        
        // 如何判断重复
        // 第一种方式: 遍历
        // 第二种: 数组有一个 contains 方法,能够判断重复
        if !recentEmoticon.contains(emoticon){
            
            // 把最新点击的按钮,放在第一个
            recentEmoticon.insert(emoticon, atIndex: 0)
            // 最近表情有 20个就够了
            if recentEmoticon.count >= 20 {
                // 删除最后一个
                recentEmoticon.removeLast()
            }
            //
            
        }
        
        // 最近表情的存储
        
    }
    
///  我们把这4组表情放到一个数组里,方便读取
    /// 声明成类方法,方便外界调用
   class func getAllEmoticon() -> [[[HMEmoticon]]] {
        //return [二维数组,二维数组,]
        return [pageEmotions(recentEmoticon),pageEmotions(defaultEmoticon),pageEmotions(emojiEmoticon),pageEmotions(lxhEmoticon)]
    
    }
    
///  定义一个方法,来读取表情包的数据
    /// 我们可以以 一个表情包为例,当读取出来之后,我们再修改参数(再抽取)
    /// 以读取 default 为例
    
    ///  读取沙盒数据
    ///
    ///  - parameter filePath: 表情包的文件夹名字
    ///
    ///  - returns:返回表情数组
    class func readEmoticon(filePath:String) ->[HMEmoticon]{
    
        
        // 1.读取bunlde
        let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // 2. 需要拼接包名字
        let packagePath = (bundlePath as NSString).stringByAppendingPathComponent(filePath)
        // 3. 需要拼接 info.plist
        let infoPath = (packagePath as NSString).stringByAppendingPathComponent("info.plist")
        // 4 . 读取字典plist
        let dict = NSDictionary(contentsOfFile: infoPath)!
        
        printLog(dict)
    
        // 5. 获取表情数组字典
    let emoticonsDict = dict["emoticons"] as! [[String:AnyObject]]
    
    
    // 6. 对数组进行遍历,然后进行字典转模型
    var resulst = [HMEmoticon]()
    
    for emoticonDict in emoticonsDict {
        
        // 进行字典转模型
        let model = HMEmoticon(dict: emoticonDict)
        //  把图片的路径赋值给path
        model.path = packagePath
        
        resulst.append(model)
    }
    
    
    
        return resulst
    }
    
    
///  对数组进行一下切割,每页 20个表情
    class func pageEmotions(emoticons: [HMEmoticon]) -> [[HMEmoticon]]{
        
        // 1. 首先要知道有多少页
        let page = ( emoticons.count - 1 ) / 20 + 1
        
        // 2. 初始化一个数组,用于接收切割的数据
        var result = [[HMEmoticon]]()
        
        // 3. 通过循环进行切割
        for i in 0..<page {
            
            // 其实位置
            // 0,20,40
            let loc = 20 * i
            // 切割的长度
            // len的话,到最后不一定是 20,要考虑边界问题
            var len = 20
            
            // 如果
            if loc + len > emoticons.count {
                
                len = emoticons.count - loc
                
            }
            
            
           let subArray = (emoticons as NSArray).subarrayWithRange(NSMakeRange(loc, len)) as! [HMEmoticon]
            
            // 切割完成之后,把数组添加到result数组里
            result.append(subArray)
        }
        
        return result
    }
    
    ///  通过字符串查找表情对象的一个类方法
    ///
    ///  - parameter text: 表情字符串
    ///
    ///  - returns: 表情对象
    class func searchEmoticon(text: String) -> HMEmoticon?{
        
        // 遍历
        // 遍历默认表情包
        for emoticon in defaultEmoticon {
            
            if emoticon.chs == text{
                return emoticon
            }
        }
        // 遍历浪小花
        for emoticon in lxhEmoticon {
            if emoticon.chs == text{
                return emoticon
            }
        }
        
        return nil
        
    }
}
